package com.leetcode.q1413;

/**
 * <p> description: 逐步求和得到正数的最小值
 * <p>
 * 给你一个整数数组nums。你可以选定任意的正数startValue作为初始值
 * <p>
 * 你需要从左到右遍历nums数组，并将startValue 依次累加上nums数组中的值
 * <p>
 * 请你在确保累加和始终大于等于 1 的前提下，选出一个最小的正数作为 startValue
 *
 * </p>
 *
 * @author tanzc
 * @date 2022/8/9
 **/
public class MinStartValue {
    public int minStartValue(int[] nums) {
        int startValue = 1;
        int sum = startValue;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
            if (sum <= 0) {
                startValue += 1 - sum;
                sum = 1;
            }
        }
        return startValue;
    }

    public int minStartValue2(int[] nums) {
        int min = 0;
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
            min = Math.min(min, sum);
        }
        return 1 - min;
    }

    public static void main(String[] args) {
        MinStartValue minStartValue = new MinStartValue();
        int[] nums = new int[]{-3, 2, -3, 4, 2};
        System.out.println(minStartValue.minStartValue2(nums));
        System.out.println(minStartValue.minStartValue2(new int[]{1, -2, -3}));
    }
}
